home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
embedded
/
mcu
/
float09.arc
/
NOTRAP.SA
< prev
next >
Wrap
Text File
|
1987-03-04
|
7KB
|
329 lines
NAM NOTRAP
TTL OVERFLOW/UNDERFLOW NO TRAP HANDLERS
*
* LINKING LOADER DEFINITIONS
*
XDEF UNFLNT,OVFLNT,MAXTBL,MINTBL
*
XREF ROUND,TFRACT,MOVE,INFIN,NAN,ZERO,LARGE
XREF FILSKY,DENORM,FPMOVE,DNMTBL
*
* REVISION HISTORY:
* DATE PROGRAMMER REASON
*
* 28.MAY.80 G. STEVENS ORIGINAL
* 03.AUG.80 G. STEVENS FIX MIN & MAX TABLES
* 13.AUG.80 G. STEVENS REWRITE UNFLNT W/ UTILITIES
* 21.AUG.80 G. STEVENS REWORK NOTRAP AND FIX TYPO
* 22.AUG.80 G. STEVENS SET INEXACT FLAG IN OVFLNT
* 25.AUG.80 G. STEVENS USE NEW TABLE IN UNFLNT
* 27.AUG.80 J. BONEY FIX TYPOS IN OVFLNT
* 05.SEP.80 G. STEVENS CLEAR ERROVF IN OVFLNT
* 03.OCT.80 G. STEVENS FIX BITCNT TBL. REF. IN UNFLNT
* 08.DEC.80 J. BONEY OVFLNT-CHANGED BRA CLROVF TO BSR CLROVF
*
PAGE
*
*
* HERE IS A BUNCH OF COMMONLY USED TABLES
*
*
* MAX EXPONENT TABLE
*
MAXTBL FDB SMAXEX SINGLE
FDB DMAXEX DOUBLE
FDB EMAXEX EXTENDED
FDB EMAXEX EXT. FORCE TO SINGLE
FDB EMAXEX EXT. FORCE TO DOUBLE
*
* MIN EXPONENT TABLE
*
MINTBL FDB SMINEX SINGLE
FDB DMINEX DOUBLE
FDB EMINEX EXTENDED
FDB EMINEX EXT. FORCE TO SINGLE
FDB EMINEX EXT. FORCE TO DOUBLE
*
*
*
* BIT COUNT TABLE ( TELLS HOW MANY BITS
* OF SIGNIFICANCE THERE GIVEN A CERTAIN
* PRECISION )
*
BITCNT FDB 25 SINGLE
FDB 54 DOUBLE
FDB 65 EXTENDED
FDB 25 EXT. FORCE TO SINGLE
FDB 54 EXT. FORCE TO DOUBLE
*
*
* HERE ARE THE "NO TRAP" OVERFLOW AND UNDERFLOW
* HANDLERS.
*
******************************************************************
*
* SUBROUTINE UNFLNT
*
* UNFLNT HANDLES UNDERFLOW WHEN THE UNDERFLOW
* TRAP IS DISABLED.
*
* ON ENTRY: STCK FRAME RESULT CONTAINS INPUT ARGUMENT.
* U - POINTER TO THE STACK FRAME
*
* ON EXIT: STACK FAME RESULT CONTAINS A DENORMALIZED
* VALUE OR TRUE ZERO.
* U,S - UNCHANGED
* X,Y,D,CC - DESTROYED
*
* OPERATION:
* THE RESULT IS DENORMALIZED ROUNDED AND SET TO
* A TRUE ZERO IF NECCESSARY. IF THE ROUNDING MODE IS
* NOT EITHER ROUND TO - INFINITY OR + INFINITY, THEN
* THE UNDERFLOW FLAG IS SET.
*
*
UNFLNT EQU *
*
* GET PROPER MIN. EXPONENT
*
LEAY BITCNT,PCR
LEAX DNMTBL,PCR EXPONENT TABLE
LDB RPREC,U DETERMONE PRECISION
ABX PTR INTO EXPONENT TABLE
LEAY B,Y PTR INTO BITCNT TABLE
*
* TAKE DIFFERENCE OF MIN. AND ACTUAL
* EXPONENTS
*
LDD 0,X
SUBD EXPR,U
*
* IF THE EXPONENT DIFFERENCE MEANS THAT THE FRACTION
* AND THE GUARD BIT WILL BECOME ZERO UPON DENORMALIZING
* THEN JUST OR THESE BITS INTO THE STIKY AND ZERO THEM OUT.
*
LEAX RESULT,U
IF D,GT,(0,Y)
LBSR FILSKY FILL STIKY
*
* ELSE DENORMALIZE THE FRACTION AS PLANNED
*
ELSE
LBSR DENORM DENORMALIZE THE FRACTION
*
ENDIF
*
LBSR ROUND ROUND RESULT
*
* IF THE FRACTION BECAME ZERO AS A RESULT OF DENORMALIZING
* AND ROUNDING, THEN SET THE RESULT TO A TRUE ZERO.
*
LBSR TFRACT
IFCC EQ FRACTION IS ZERO
LDD #$8000 ZERO EXPONENT
STD EXPR,U
LDA #TYZERO ZERO TYPE
STA TYPER,U
*
* ELSE SET THE PROPER DENORMALIZED EXPONENT
*
ELSE
LEAX MINTBL,PCR MINIMUM EXPONENT TABLE
LDB RPREC,U PRECISION INDEX
LDD B,X DENORMALIZED EXPONENT
STD EXPR,U
*
ENDIF
*
* CHECK ROUNDING MODE; IF NOT RN OR RP THEN CLEAR
* THE UNDERFLOW FLAG.
*
LDA [PFPCB,U] CONTROL BYTE IN FPCB
ANDA #CTLRND ROUND BITS
IF A,NE,#RN NOT RP
IF A,NE,#RZ NOT RM
LDA TSTAT,U
ANDA #$FF-ERRUNF CLEAR UNDERFLOW FLAG
STA TSTAT,U
*
ENDIF
ENDIF
*
*
RTS RETURN
*
*
*
PAG
*
*****************************************************************
*
* SUBROUTINE OVFLNT
*
* OVFLNT HANDLES THE OVERFLOW WHEN THE OVERFLOW
* TRAP IS DISABLED.
*
* ON ENTRY: STACK FRAME RESULT CONTAINS THE INPUT
* ARGUMENT
*
* ON EXIT: U,S - UNCHANGED
* X,Y,D,CC - DESTROYED
*
*
OVFLNT EQU *
*
LDA TSTAT,U
ORA #ERRINX SET INEXACT RESULT BIT
STA TSTAT,U
*
* CASE( ROUNDING MODE ) TO DETERMINE ACTION
* TO BE TAKEN.
*
LDA [PFPCB,U] CONTROL WORD
ANDA #CTLRND ROUNDING BITS
*
* CASE OF ROUND TO MINUS INFINITY
*
IF A,EQ,#RM
BSR CLROVF CLEAR OVERFLOW FLAG
*
LDA RESULT,U
IFCC GE RESULT POSITIVE
LDA FRACTR,U
*
* IF RESULT IS POSITIVE AND NORMALIZED
* THEN DELIVER LARGEST POSSIBLE NUMBER
* TO DESTINATION.
*
IFCC LT RESULT NORMALIZED
LEAX LARGE,PCR LARGE CONSTANT
BSR MVRES MOVE TO RESULT
*
ENDIF
*
* ELSE IF RESULT POSITIVE AND NOT NORMALIZED
* THEN DELIVER SIGNIFICAND AND LARGEST
* EXPONENT TO DESTINATION.
*
BSR SETEXP SET LARGEST EXPONENT
*
* ELSE IF THE RESULT IS NEGATIVE THEN RETURN
* MINUS INFINITY TO DESTINATION.
*
ELSE RESULT IS NEGATIVE
LEAX INFIN,PCR INFINITY CONSTANT
BSR MVNRES MOVE TO RESULT AND NEGATE
*
ENDIF RESULT IS POSITIVE
*
* CASE OF ROUND TO PLUS INFINITY
*
ELSE
IF A,EQ,#RP
BSR CLROVF
*
LDA RESULT,U
IFCC LT RESULT NEGATIVE
LDA FRACTR,U
*
* IF THE RESULT IS NEGATIVE AND NORMALIZED
* THEN DELIVER LARGEST NEGATIVE NUMBER TO
* DESTINATION.
*
IFCC LT RESULT NORMALIZED
LEAX LARGE,PCR LARGE CONSTANT
BSR MVNRES MOVE TO RESULT AND SET NEGATIVE
*
ENDIF
*
* ELSE IF RESULT IS NEGATIVE AND NOT NORMALIZED
* THEN DELIVER SIGNIFICAND AND LARGEST EXPONENT
* TO DESTINATION.
*
BSR SETEXP SET EXPONENT GIVEN THE PRECISION
*
* ELSE IF THE RESULT IS POSITIVE THEN
* DELIVER PLUS INFINITY TIO DESTINATION
*
ELSE RESULT IS POSITIVE
LEAX INFIN,PCR INFINITY CONSTANT
BSR MVRES MOVE TO RESULT
*
ENDIF RESULT IS NEGATIVE
*
* CASE OF ROUND TO NEAREST OR ZERO
*
ELSE
*
* RETURN INFINITY FO PROPER SIGN
*
LEAX INFIN+1,PCR INFINITY CONSTANT
LEAY EXPR,U DESTINATION
LDB #ARGSIZ-1
LBSR MOVE
*
ENDIF
ENDIF CASE( ROUNDING MODE )
*
RTS RETURN
*
*
* PROCEDURE CLROVF
*
* CLEARS THE OVERFLOW FLAG IN TSTAT
*
CLROVF EQU *
*
LDA TSTAT,U CLEAR OVERFLOW FLAG
ANDA #$FF-ERROVF
STA TSTAT,U
*
RTS RETURN
*
*
* PROCEDURE SETEXP
*
* INSERTS LARGEST EXPONENT INTO THE EXPONENT FIELD OF THE RESULT
*
SETEXP EQU *
*
LDB RPREC,U DETERMINE PRECISION
LEAX MAXTBL,PCR EXPONENT TABLE
LDD B,X
SUBD #01
STD EXPR,U
*
RTS RETURN
*
*
* PROCEDURE MVRES
*
* MOVES THE STACK FRAME ARGUMENT POINTED AT BY THE X-REG. TO
* THE STACK FRAME RESULT
*
MVRES EQU *
*
LEAY RESULT,U DESTINATION
LBSR FPMOVE
*
RTS RETURN
*
*
* PROCEDURE MVNRES
*
* MOVES THE STACK FRAME ARGUMENT POINTED AT BY THE X-REG. TO
* THE STACK FRAME RESULT AND MAKES THE RESULT NEGATIVE
*
MVNRES EQU *
*
LEAY RESULT,U DESTINATION
LBSR FPMOVE
LDA #$80
STA SIGNR,U
*
RTS RETURN
*
*
PAG
*